工控網(wǎng)首頁
>

應(yīng)用設(shè)計

>

基于OpenSSL的信息安全RTU的設(shè)計與實(shí)現(xiàn)

基于OpenSSL的信息安全RTU的設(shè)計與實(shí)現(xiàn)

基于OpenSSL的信息安全RTU的設(shè)計與實(shí)現(xiàn)

摘要:隨著信息化程度的快速發(fā)展,工業(yè)現(xiàn)場的安全通信越來越受到重視,文中給出了一種基于OpenSSL的信息安全RTU的設(shè)計與實(shí)現(xiàn)。首先介紹了SSL和OpenSSL,然后給出了基于OpenSSL的信息安全RTU的總體設(shè)計方案,并結(jié)合自身項(xiàng)目,詳細(xì)介紹了其設(shè)計與實(shí)現(xiàn)過程,該RTU可以達(dá)到相對較高的安全通信要求。

關(guān)鍵字:OpenSSL;嵌入式系統(tǒng);RTU;安全

1        引言

隨著計算機(jī)應(yīng)用的不斷深入,特別是信息化與工業(yè)化深度融合及物聯(lián)網(wǎng)技術(shù)的快速發(fā)展,許多嵌入式網(wǎng)絡(luò)設(shè)備諸如RTU正被一批批的開發(fā)出來。

RTU英文全稱Remote Terminal Unit,中文全稱為遠(yuǎn)程終端單元,通過自身的軟件系統(tǒng),實(shí)現(xiàn)調(diào)度系統(tǒng)對生產(chǎn)現(xiàn)場的遙測、遙控、遙調(diào)和遙信等功能;是組成工業(yè)控制數(shù)據(jù)采集與監(jiān)視控制系統(tǒng)的細(xì)胞單元,在工業(yè)控制領(lǐng)域有著非常廣泛的應(yīng)用。

隨著網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,具備快速的響應(yīng)能力、開放式的通信協(xié)議和平臺的網(wǎng)絡(luò)化RTU已經(jīng)成為目前市場上的主流工業(yè)控制產(chǎn)品之一,而安全性一直是通信網(wǎng)絡(luò)中最大的問題之一。目前在工業(yè)控制現(xiàn)場應(yīng)用的RTU控制器與SCADA(數(shù)據(jù)采集與監(jiān)視控制系統(tǒng))組態(tài)軟件之間一般采用明文方式進(jìn)行數(shù)據(jù)交互,這種開放式的通信方式存在重大的安全隱患,即傳輸?shù)耐ㄓ崍笪姆浅H菀妆坏谌奖O(jiān)聽、截取和偽造,一旦發(fā)生這種情況,對生產(chǎn)效益將會產(chǎn)生不可估量的損失。世界范圍內(nèi)繼“震網(wǎng)”病毒事件后又接連發(fā)生的幾起重大的工業(yè)網(wǎng)絡(luò)安全事件,將工業(yè)網(wǎng)絡(luò)安全推向了一個新的高度。如何防微杜漸,防止工業(yè)控制系統(tǒng)安全事件的再次發(fā)生,在重點(diǎn)能源企業(yè)構(gòu)筑安全的工業(yè)控制系統(tǒng),已經(jīng)成為政府和企業(yè)關(guān)注的熱點(diǎn)。

信息安全型RTU控制器不但可以實(shí)現(xiàn)對工業(yè)控制現(xiàn)場數(shù)據(jù)的采集及處理功能,同時在數(shù)據(jù)傳輸前進(jìn)行加密,拒絕那些來自未授權(quán)用戶的訪問,從而有效杜絕由于信息泄露或非法侵入導(dǎo)致的工業(yè)安全隱患。

圖1-1 信息安全RTU與傳統(tǒng)RTU對比圖

目前密碼編碼算法按秘鑰使用方法分為對稱密碼算法和非對稱密碼算法,以及不需要秘鑰的信息摘要算法,要實(shí)現(xiàn)這些算法及相應(yīng)的協(xié)議,工作量是非常巨大的,作為工程實(shí)現(xiàn),通常采用現(xiàn)存的一些密碼算法軟件包來實(shí)現(xiàn)二次開發(fā)。OpenSSL[1]為開發(fā)密碼安全平臺提供了豐富的密碼算法接口,可以安全高效的實(shí)現(xiàn)信息安全RTU。文章將討論使用OpenSSL與數(shù)字證書,給出信息安全RTU進(jìn)行遠(yuǎn)程安全通信的總體設(shè)計方案,并詳細(xì)介紹信息安全RTU的設(shè)計及實(shí)現(xiàn)過程。

2        SSL與OpenSSL

1    

2    

2.1   SSL協(xié)議

SSL協(xié)議[1],即 安全套接層 ( Secure Sockets Layer) 協(xié)議,是 Netscape公司推出的為網(wǎng)絡(luò)應(yīng)用層的通信提供認(rèn)證、數(shù)據(jù)保密和數(shù)據(jù)完整性服務(wù)的一種安全通信協(xié)議。 SSL協(xié)議建立在可靠的TCP 傳輸控制協(xié)議之上,在網(wǎng)絡(luò)模型中位于應(yīng)用層和傳輸層之間,并且與上層協(xié)議無關(guān),各種應(yīng)用層協(xié)議( HTTP,F(xiàn)TP,TELNET 等) 都能通過 SSL 協(xié)議進(jìn)行透明傳輸。SSL 協(xié)議分為握手協(xié)議和記錄協(xié)議,握手協(xié)議是指在數(shù)據(jù)傳輸前,服務(wù)器與客戶端進(jìn)行身份鑒別,同時協(xié)商決定采用的協(xié)議版本、加密算法等。每次連接,握手協(xié)議都要建立一個會話,且每次握手中產(chǎn)生的對稱秘鑰都是獨(dú)特的,這種每次更換秘鑰的方法在更大程度上保證了通信的安全性。記錄協(xié)議是指對要傳輸?shù)男畔⒂脜f(xié)商好的對稱秘鑰加密后,再通過TCP/IP的連接將信息發(fā)送出去。

SSL協(xié)議提供的安全連接具有以下三個基本特點(diǎn)[2-3]

(1)  連接是保密的:對于每個連接都有一個唯一的會話密鑰,采用對稱密碼體制( 如 DES、RC4等) 來加密數(shù)據(jù)。

(2)  連接是可靠的:消息的傳輸采用 MAC 算法( 如MD5、SHA 等) 進(jìn)行完整性檢驗(yàn)。

(3)  雙方是可信任的:對端實(shí)體的鑒別采用非對稱密碼體制( 如 RSA、DSS 等) 進(jìn)行認(rèn)證。

2.2   OpenSSL

OpenSSL是一個健全的、全開放的和開放源代碼的軟件包,最早由Eric A. Yang和Tim J.Hudson開發(fā);到目前為止,OpenSSL已經(jīng)實(shí)現(xiàn)了對安全套接層SSLV2.0/ V3.0和傳輸安全協(xié)議TLS V1.0的支持[4]。與其它的一些同類型密碼庫(如Crypto++、Crypto API等)相比,OpenSSL具有以下優(yōu)點(diǎn):

(1)  采用C語言開發(fā),支持多種操作系統(tǒng)(Linux、BSD、Windows、Mac、VMS等),可移植性好。

(2)  功能全面,密碼庫支持的密碼算法豐富,如對稱密碼算法:AES、DES、CAST、IDEA、RC4等;非對稱密碼算法:DH算法、RSA算法、DSA算法和橢圓曲線算法;信息摘要算法:MD2、MD5、SHA-1和RIPEMD;另外,OpenSSL軟件包還提供了豐富的秘鑰和證書管理功能以及用來進(jìn)行加密模塊擴(kuò)展的引擎機(jī)制。

(3)  OpenSSL提供了CA等用于生成各種X.509證書(網(wǎng)絡(luò)通信中標(biāo)志服務(wù)方實(shí)體的身份,含有服務(wù)方的公開秘鑰)、秘鑰文件的命令,方便程序的編寫和調(diào)試。

(4)  源代碼開放,能夠根據(jù)自己的需要選擇不同的軟件版本進(jìn)行修改和移植。

3        基于OpenSSL的信息安全RTU的總體設(shè)計

3    

3.1   信息安全RTU硬件平臺設(shè)計

圖3-1 信息安全RTU核板框圖

本文采用的系統(tǒng)硬件平臺是由北京中油瑞飛信息技術(shù)有限責(zé)任公司自主研發(fā)的一款RTU產(chǎn)品,分為核板和底板兩個部分。核板采用Atmel AT91SAM9X25為微處理器,并采用專業(yè)穩(wěn)定的內(nèi)核電源芯片和外部看門狗復(fù)位芯片來保證系統(tǒng)運(yùn)行的穩(wěn)定性,CPU主頻為400MHz,采用128M的DDR2作為內(nèi)存設(shè)備,RTU的Flash存儲為128M的Nand Flash,RTU核板資源框圖如圖3-1所示。

底板接口和資源方面:1路10/100M以太網(wǎng)RJ-45接口,4路串行接口,1路CAN接口,1路ZigBee無線接口,8路AI和DI接口,4路AO和DO接口等。RTU底板接口及資源框圖如圖3-2所示。

圖3-2 信息安全RTU底板接口及資源框圖

除上述通用資源外,信息安全RTU采用硬件引擎加密機(jī)制(一種替換掉OpenSSL的底層加密模塊的加密機(jī)制)[5],如3-2圖所示,硬件加密模塊采用工業(yè)級帶有安全主控芯片的SD卡。加密芯片高速數(shù)據(jù)總線接口,除了支持國際通用加密算法AES、DES、RSA、SHA外,還支持SM2算法,這就在保證數(shù)據(jù)吞吐率的同時增強(qiáng)信息加密的強(qiáng)度和靈活性。

3.2   基于OpenSSL的信息安全RTU的系統(tǒng)軟件設(shè)計

整個安全信息傳輸系統(tǒng)包括三個部分:服務(wù)端,由基于OpenSSL的信息安全RTU充當(dāng);客戶端,由安裝SCADA軟件的電腦充當(dāng);加密機(jī)代理,由安裝Linux系統(tǒng)的加密機(jī)充當(dāng)。整個加密系統(tǒng)的構(gòu)成如圖3-3所示:

圖3-3 安全信息傳輸系統(tǒng)組成圖

在整個安全信息傳輸系統(tǒng)中,信息安全RTU和加密機(jī)之間采用的是SSL安全連接的信息傳輸,而SCADA客戶端與加密機(jī)之間采用的是直連,這是因?yàn)镽TU與加密機(jī)之間的信息處于公網(wǎng)內(nèi),明文傳輸容易被第三方惡意監(jiān)聽、截取和偽造,加密機(jī)與SCADA系統(tǒng)處于公司內(nèi)網(wǎng)中,安全性得到保證。

該系統(tǒng)中,信息安全RTU主要實(shí)現(xiàn)加密機(jī)代理的身份認(rèn)證、與代理的信息傳輸、和底層數(shù)據(jù)的采集,其中加密機(jī)的身份認(rèn)證和與加密機(jī)的信息交互為信息安全RTU實(shí)現(xiàn)的重點(diǎn)。

基于OpenSSL的信息安全RTU的軟件結(jié)構(gòu)分為以下四個層次:

(1)    引導(dǎo)加載程序Bootloader

Bootloader是嵌入式系統(tǒng)在上電后執(zhí)行的第一段代碼,這段程序在完成CPU和相關(guān)硬件的初始化后,再將操作系統(tǒng)映像拷貝到內(nèi)存中然后跳轉(zhuǎn)到操作系統(tǒng)所在的空間,啟動操作系統(tǒng),本文采用的是bootstrap+uboot作為第一層引導(dǎo)加載程序。

(2)    經(jīng)剪裁、移植的Linux內(nèi)核

Linux內(nèi)核包含著所有操作系統(tǒng)的核心功能和網(wǎng)絡(luò)協(xié)議棧,是Linux操作系統(tǒng)的心臟,本文設(shè)計的信息安全RTU采用的是經(jīng)剪裁的2.6.39版本的Linux內(nèi)核。

(3)    文件系統(tǒng)

文件系統(tǒng)包括根文件系統(tǒng)和建立于Flash設(shè)備上的文件系統(tǒng)。嵌入式Linux啟動時,第一個掛載的是根文件系統(tǒng),根文件系統(tǒng)中包含了特定的目錄下不同名稱、不同用途的文件。

(4)    用戶應(yīng)用程序

用戶自己開發(fā)的運(yùn)行于嵌入式Linux操作系統(tǒng)之上的計算機(jī)程序,包括自定義協(xié)議棧、web服務(wù)器等。信息安全RTU開發(fā)的應(yīng)用程序包括基于OpenSSL的服務(wù)端與加密機(jī)通信程序、本地模擬量與數(shù)字量采集控制程序、串口Modbus程序等。

上述4個層次中,前3個是信息安全RTU平臺的搭建,第4個層次是基于OpenSSL的信息安全RTU功能實(shí)現(xiàn)的重點(diǎn)。

4        OpenSSL握手、數(shù)據(jù)傳輸?shù)木唧w實(shí)現(xiàn)

在整個系統(tǒng)中,信息安全RTU與加密機(jī)代理的通信流程如圖4-1所示,其中步驟1-13為SSL的握手階段,完成代理與服務(wù)端的雙向認(rèn)證、加密算法的協(xié)商、秘鑰的確定。這13條消息可以分為4個階段:

第1階段是加密機(jī)代理向信息安全RTU服務(wù)端發(fā)送一個連接請求Client Hello,其中包含了加密機(jī)的SSL協(xié)議版本號、隨機(jī)數(shù)key和準(zhǔn)備使用的加密算法。

第2階段是RTU服務(wù)端收到加密機(jī)代理的連接請求后向代理發(fā)送自己的SSL協(xié)議版本號、加密算法的種類,隨機(jī)數(shù)key,自身SD卡硬件證書以及代理的證書請求。

第3階段是代理收到服務(wù)端發(fā)送的信息后,會驗(yàn)證服務(wù)端的合法性,包括:證書是否過期、發(fā)行服務(wù)器證書的CA是否可靠、服務(wù)器證書上的域名是否和服務(wù)器的實(shí)際域名相匹配等。如果合法性驗(yàn)證沒有通過,通訊將斷開,如果合法性驗(yàn)證通過,加密機(jī)代理會隨機(jī)產(chǎn)生一個對稱秘鑰key,并用提取的服務(wù)器公鑰對其進(jìn)行加密,然后產(chǎn)生一個隨機(jī)數(shù),并數(shù)字簽名,最后將簽名的隨機(jī)數(shù)、代理自己的證書和加密的對稱秘鑰key發(fā)給服務(wù)器,并向服務(wù)端發(fā)出信息,指明后面的數(shù)據(jù)通訊將采用該對稱秘鑰作為通信秘鑰,同時通知服務(wù)端代理握手過程結(jié)束。

第4階段信息安全RTU服務(wù)端對代理發(fā)送來的證書和簽名隨機(jī)數(shù)進(jìn)行合法性檢驗(yàn),如果檢測沒有通過,通訊立即中斷,如果驗(yàn)證通過,服務(wù)端用私鑰解密代理發(fā)送來的對稱秘鑰,并向代理發(fā)送信息,指明后面的數(shù)據(jù)通訊使用該對稱秘鑰,同時通知代理服務(wù)端握手過程結(jié)束。

圖4-1 信息安全RTU與加密機(jī)代理通信流程圖

握手過程結(jié)束后,加密機(jī)代理與信息安全RTU端將進(jìn)行應(yīng)用數(shù)據(jù)的傳輸,直至此次通話結(jié)束。

基于OpenSSL的信息安全RTU為實(shí)現(xiàn)SSL通信軟件各個模塊的設(shè)計及關(guān)系如圖4-2所示,信息安全RTU服務(wù)端在接收到加密機(jī)代理的請求后,會判斷該請求是否為已連接且為未斷開的請求,如果是,則啟用會話重用模塊,而不需要重新握手建立連接,這種方式會節(jié)省不必要的開銷,提高通訊效率;如果該請求是新的連接請求,則需要建立SSL連接。

圖4-2 基于OpenSSL的信息安全RTU的SSL通信中各模塊關(guān)系圖

SSL連接過程需要用到三個模塊:SSL初始化模塊、SSL連接模塊和SSL身份驗(yàn)證模塊;SSL密碼組控制模塊用于RTU與加密機(jī)通信密碼的選擇與控制,加密機(jī)代理可以通過修改密碼來保證通信的安全;SSL通信模塊用于RTU與加密機(jī)建立SSL連接后雙方的數(shù)據(jù)傳輸。下面詳細(xì)介紹SSL初始化、SSL接收連接和數(shù)據(jù)傳輸。

1)       SSL初始化

首先要初始化OpenSSL的函數(shù)庫,通過函數(shù)SSL_library_init()來實(shí)現(xiàn),然后調(diào)用SSL_load_error_string()函數(shù),可以將錯誤碼轉(zhuǎn)換成字符串。

接著創(chuàng)建SSL上下文, 信息安全RTU采用的是硬件引擎加密機(jī)制,首先要初始化硬件加密模塊,通過調(diào)用ENGINE_load_sdkey()函數(shù)實(shí)現(xiàn)這一功能,該函數(shù)中會完成硬件加密模塊SD卡中的加解密算法庫替換OpenSSL中的軟加解密算法庫等一系列工作。然后調(diào)用SSL_METHOD *meth=SSLv23_server_method()函數(shù)用來初始化SSL支持的版本;SSL_CTX *ctx=SSL_CTX_new(meth)函數(shù)用來創(chuàng)建SSL_CTX數(shù)據(jù)結(jié)構(gòu),該結(jié)構(gòu)體主要用于準(zhǔn)備SSL握手前的環(huán)境,包括CA證書、服務(wù)端的證書、私鑰、協(xié)議版本號等,然后通過調(diào)用各功能函數(shù)實(shí)現(xiàn)該數(shù)據(jù)結(jié)構(gòu)的初始化。

上文提到,RTU服務(wù)端需要認(rèn)證加密機(jī)代理,所以需要加入請求代理認(rèn)證的內(nèi)容,調(diào)用函數(shù)SSL_CTX_set_verify(ctx,SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, NULL)實(shí)現(xiàn),參數(shù)SSL_VERIFY_PEER需要進(jìn)行代理認(rèn)證,SSL_VERIFY_FAIL_IF_NO_PEER_CERT表示如果客戶端不提交證書則SSL連接過程立刻終止。

2)       SSL接受連接

RTU端在收到加密機(jī)代理發(fā)出的連接請求后,RTU端就會創(chuàng)建SSL對象來對應(yīng)一條SSL連接,SSL對象并不是直接附加到套接字上,而是通過中間層BIO對象來實(shí)現(xiàn)的[6];SSL對象附加到BIO對象上,然后BIO對象實(shí)現(xiàn)與套接字實(shí)現(xiàn)通信。這樣使得SSL對象的實(shí)現(xiàn)不僅局限于網(wǎng)絡(luò)套接字,還可以用于實(shí)現(xiàn)串口等。信息安全RTU中實(shí)現(xiàn)方法為:ssl = SSL_new(ctx),創(chuàng)建SSL對象;SSL_set_fd(ssl, ucSocket)實(shí)現(xiàn)SSL對象與BIO對象以及BIO對象與套接字的綁定;err = SSL_accept(ssl)實(shí)現(xiàn)與代理的握手過程,包括雙方的互相認(rèn)證、秘鑰的協(xié)商等,如果握手成功,返回1,SSL連接成功建立成功,可以開始進(jìn)行數(shù)據(jù)傳輸。如果失敗,可以通過檢查返回值來確定連接錯誤的原因。

信息安全RTU端與加密機(jī)代理的SSL連接建立成功后,SSL對象和套接字作為一個數(shù)據(jù)結(jié)構(gòu)保存到會話重用模塊中,只要SSL連接不中斷,RTU與加密機(jī)通信都是通過調(diào)用會話重用模塊進(jìn)行通信的。

3)       數(shù)據(jù)傳輸

信息安全RTU與加密機(jī)代理通信交互時,發(fā)送數(shù)據(jù)用函數(shù)SSL_write(ssl,buffer, length),接收函數(shù)用函數(shù)SSL_read(ssl, buffer, length),與系統(tǒng)函數(shù)read和write基本一致,只是第一個參數(shù)變?yōu)镾SL對象。

最后,通信完成后,要終止SSL連接,釋放資源,調(diào)用SSL_free(ssl)來釋放SSL對象,調(diào)用SSL_CTX_free (ctx)來釋放CTX環(huán)境對象。

5        總結(jié)

本文從發(fā)展迅速的信息化工業(yè)現(xiàn)場出發(fā),討論了當(dāng)今工業(yè)現(xiàn)場中RTU在通信中存在的安全隱患,為解決這一問題,設(shè)計并實(shí)現(xiàn)了基于OpenSSL的信息安全RTU,并詳細(xì)介紹了該RTU的總體設(shè)計方案及OpenSSL握手、數(shù)據(jù)通信的具體實(shí)現(xiàn),文中設(shè)計的這款信息安全RTU適用于需要安全通信的工業(yè)現(xiàn)場。

參考文獻(xiàn):

[1]    Bruce Schneider. 應(yīng)用密碼學(xué)[ M ] .北京:機(jī)械工業(yè)出版社, 2000

[2]    W.Chou.Accelerating securetransactions.IT Professional,2003,2:37

[3]    Nachiketh, Potlapally,S Ravi.AStudy of the Energy Consumption Characteristics of Cryptographic Algorithms andSecurity Protocols. IEEE TRANSACTIONS ON MOBILE COMPUTION, 2006, 5(2):128

[4]    Dierks T, Allen C. The TLSProtocol Version 1.0[S] IET FRFC2246, 1999.

[5]    齊洪喜,周大水 . 基于 OpenSSL 的安全密碼平臺的設(shè)計與實(shí)現(xiàn)[J]. 計算機(jī)工程與設(shè)計,2007,28(2):314-315,319.

[6]    Rescorla E. SSL與TLS Designing and Building Secure Systems[M] . 崔凱譯北京:中國電力出版社, 2002

投訴建議

提交

查看更多評論
其他資訊

查看更多

中油瑞飛CM10系列模塊化RTU控制器

油氣生產(chǎn)物聯(lián)網(wǎng)技術(shù)在油氣生產(chǎn)中的應(yīng)用

2016 中國油氣儲運(yùn)技術(shù)交流大會暨儲運(yùn)新技術(shù)新設(shè)備和新材料展示會

瑞飛SmartPlus系列RTU用戶手冊

東方物探與中亞天然氣管道有限公司簽署戰(zhàn)略合作框架協(xié)議雙方為中亞管道+ICT中心揭牌